package inputstream;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * FileInputStream的使用（字节输入流 文件--> 程序)
 * 使用FilelnputStream读取hello.txt文件，并将文件内容显示到控制台
 */
public class FileInputStream_ {
    public static void main(String[] args) {

    }

    /**
     * 单个字节的读取，效率比较低
     * -> 使用read(byte[] b)
     */
    @Test
    public void readFile01() {
        String filePath = "e:\\hello.txt";
        FileInputStream fileInputStream = null;
        int readData = 0;
        try {
            //创建 FileInputStream对象，用于读取文件
            fileInputStream = new FileInputStream(filePath);
            //从该输入流读取一个字节的数据。如果没有输入可用，此方法将阻止
            //如果返回-1，表示读取完毕
            while((readData = fileInputStream.read()) != -1) {
                System.out.print((char)readData);//转成char显示
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //需要关闭流，因为流是一种资源
            try {
                fileInputStream.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

    }

    /**
     * 使用read(byte[] b) 读取文件，提高效率
     */
    @Test
    public void readFile02() {
        String filePath = "e:\\hello.txt";
        FileInputStream fileInputStream = null;
        byte[] buf = new byte[8];//一次读取8个字节
        int readLen = 0;
        try {
            //创建 FileInputStream对象，用于读取文件
            fileInputStream = new FileInputStream(filePath);
            //从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。
            // 在某些输入可用之前，此方法将阻塞。
            //如果返回-1，表示读取完毕
            //如果读取正常，返回实际读取的字节数
            while((readLen = fileInputStream.read(buf)) != -1) {
                System.out.print(new String(buf, 0, readLen));//显示
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //需要关闭流，因为流是一种资源
            try {
                fileInputStream.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

    }
}
